package com.gtw.facade;

/**
 * 一个子系统与其他内部系统通信都必须经过一个统一的对象,门面系统注重"统一的对象",除了这个接口不允许有任何访问子系统的行为发生
 * Facade该角色知道子系统的所有功能和责任,该角色没有实际的业务逻辑,只是一个委托类
 * 子系统并不知道门面的存在,对子系统而言,门面仅是一个客户端而已
 * 优点:
 *      1.减少系统的互相依赖
 *      2.提高灵活性,不管子系统如何变化,只要不影响到门面系统,任由变化
 *      3.提高安全性,访问子系统只能通过门面进行
 * 缺点:
 *      不符合开闭原则,对修改关闭
 * 使用场景:
 *      1.为一个复杂的模块或子系统提供一个供外界访问的接口
 *      2.要求子系统相对独立——外界只能进行黑箱操作
 * 注意事项:
 *      1.一个子系统可以有多个门面:门面过于庞大、提供不同的路径访问(如果已经委托给已存在的门面处理,继续调用该门面处理)
 *      2.门面不参加子系统内的业务逻辑
 */
public class Facade {

    //被委托的对象
    private ClassA a = new ClassA();
    private ClassB b = new ClassB();
    private ClassC c = new ClassC();

    //提供给外部的访问方法
    public void methodA(){
        a.doSomethingA();
    }
    public void methodB(){
        b.doSomethingB();
    }
    public void methodC(){
        c.doSomethingC();
    }
}
